Un conteneur est une enveloppe virtuelle qui permet de distribuer une application avec tous les éléments dont elle a besoin pour fonctionner : fichiers source, environnement d'exécution, librairies, outils et fichiers.Wikipedia
Ils sont assemblés en un ensemble cohérent et prêt à être déployé sur un serveur et son système d'exploitation. Contrairement à la virtualisation de serveurs et à une machine virtuelle, le conteneur n’intègre pas de noyau, il s’appuie directement sur le noyau de l'ordinateur sur lequel il est déployé.Wikipedia
Kubernetes est un système open source qui vise à fournir une plate-forme permettant d'automatiser le déploiement, la montée en charge et la mise en œuvre de conteneurs d'application sur des clusters de serveurs.Wikipedia
➜ Plus de travail, moins de ressources
The way containers are designed, and particularly the way Docker is designed, the assumption is that the container is stateless.Mark Davis, ClusterHQ, 17 Jun 2015
Certains ont essayé...
... ils ont eu des problèmes!
ce n'est pas une raison pour ne pas réessayer!
Kubernetes 1.14 et les volumes persistants
Parmi 500 décideurs et lead tech sélectionnés par une étude indépendante commandée par la communauté Data on Kubernetes, 70% font tourner des applications stateful en production, les bases de données représentant la grosse majorité de ces applications stateful.dok report 2021
# Example of PostgreSQL cluster
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: cluster-example
spec:
instances: 3
primaryUpdateStrategy: unsupervised
storage:
size: 1Gi
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
# [...]
spec:
# [...]
imageName: ghcr.io/cloudnative-pg/postgresql:13.6
#[...]
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
# [...]
spec:
backup:
barmanObjectStore:
destinationPath: "[destination path here]"
s3Credentials:
accessKeyId:
name: aws-creds
key: ACCESS_KEY_ID
secretAccessKey:
name: aws-creds
key: ACCESS_SECRET_KEY
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
# [...]
spec:
postgresql:
parameters:
shared_buffers: "1GB"
auto_explain.log_min_duration: "10s"
pg_hba:
- host laetitia laetitia all scram-sha-256
# [...]
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
# [...]
resources:
requests:
memory: "32Mi"
cpu: "50m"
limits:
memory: "128Mi"
cpu: "100m"
# [...]
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
name: cluster-example
spec:
selector:
matchLabels:
postgresql: cluster-example
podMetricsEndpoints:
- port: metrics
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: cluster-example
# [...]
spec:
# [...]
monitoring:
customQueriesConfigMap:
- name: example-monitoring
key: custom-queries
Ça dépend
Votre base de données Postgres aura toujours besoin de